//
//  DownloadManager.m
//  MobileBank
//
//  Created by jiaxing Bank on 2021/12/18.
//

#import "DownloadManager.h"

@implementation DownloadManager

/*
 * @param 下载管理中心
 * @param  imageUrl  路径
 *
 */
- (NSString *)imageFilePath:(NSString *)imageUrl {
    
    // 1、获取caches文件夹路径
    NSString * cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];

    // 2、创建DownloadImages文件夹
    NSString * downloadImagesPath = [cachesPath stringByAppendingPathComponent:@"JXBDownloadImages"];

    // 3、创建文件管理器对象
    NSFileManager * fileManager = [NSFileManager defaultManager];

    // 4、判断文件夹是否存在
    if (![fileManager fileExistsAtPath:downloadImagesPath])
    {
        [fileManager createDirectoryAtPath:downloadImagesPath withIntermediateDirectories:YES attributes:nil error:nil];
    }

    // 5、拼接图片在沙盒中的路径
    /*
      因为每一个图片URL对应的是一张图片，而且URL中包含了文件的名称，所以可以用图片的URL来唯一表示图片的名称
      因为图像URL中有"/"，"/"表示的是下级目录的意思，要在存入前替换掉，所以用"_"代替
    */
    NSString * imageName = [imageUrl stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
    NSString * imageFilePath = [downloadImagesPath stringByAppendingPathComponent:imageName];

    // 6、返回文件路径
    return imageFilePath;
}

/*
 * @param 根据图片路径加载本地图片
 */
- (UIImage *)loadLocalImage:(NSString *)imageUrl {
    // 1、获取图片路径，根据上一步中创建本地图片路径的方法来获取
    NSString * filePath = [self imageFilePath:imageUrl];
   // 2、根据本地图片路径创建UIImage对象
    UIImage * image = [UIImage imageWithContentsOfFile:filePath];

   // 3、判断UIImage对象并返回
    if (image != nil) {
      return image;
    }
    return nil;
}

- (void)requestImageUrl:(NSString *)imageUrl successBlock:(imageDownLoadSuccess)successBlock errorBlock:(imageDownLoadError)errorBlock {
    
     self.successBlock = successBlock;
     self.errorBlock = errorBlock;

      // 下载图片之前先检查本地是否已经有图片
      UIImage * image = [self loadLocalImage:imageUrl];
      NSData *imageData = UIImagePNGRepresentation(image);
      //如果图片存在直接跳出；不用下载了
      if (imageData) {
        self.successBlock(imageData);
        return;
      }
    
    // 没有本地图片
    // 创建URL对象
     NSURL *url = [NSURL URLWithString:[imageUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];
    // 创建request对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 使用URLSession来进行网络请求
    // 创建会话配置对象
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    // 创建会话对象
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
    // 创建会话任务对象
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
         if (data) {
             // 将下载的数据传出去，进行UI更新
             self.successBlock(data);
             // 下载完成，将图片保存到本地
             [data writeToFile:[self imageFilePath:imageUrl] atomically:YES];
             
         }
         if (error) {
             self.errorBlock(error);
         }
     }];

    // 创建的task都是挂起状态，需要resume才能执行
    [task resume];
 }

@end
